package com.kamistoat.netty.nio;

import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

public class MappedByteBufferDemo {
    public static void main(String[] args) throws Exception{
        RandomAccessFile randomAccessFile =
                new RandomAccessFile("/home/kamistoat/ubuntu/Netty_Learning/src/main/java/com/kamistoat/netty/nio/file01.txt", "rw");
        FileChannel accessFileChannel = randomAccessFile.getChannel();

        /**
         * 1. 使用读写模式
         * 2. 可以直接修改的起始位置
         * 3. 映射到内存的大小，即将文件的多少个字节映射到内存
         * 那么在堆内存中可以直接修改的文件范围就是 0——4字节(不包含第5字节)
         */
        MappedByteBuffer mappedByteBuffer = accessFileChannel.map(FileChannel.MapMode.READ_WRITE, 0, 5);

        /**
         * 1. 要修改的字节在 映射到堆内存字节 中的相对位置
         */
        mappedByteBuffer.put(0, (byte) 'H');
        mappedByteBuffer.put(3, (byte) '9');
        accessFileChannel.close();
    }
}
